package com.zxf.basic.expand

/**
 * @author yuansui
 * @since 2018/10/13
 */


/**
 * 切割数组
 * @param size 每组的个数
 * @param block 分组后的数组, 最后一组的个数可能小于[size]
 */
fun <T> List<T>.split(size: Int, block: (group: List<List<T>>) -> Unit) {
    val group = mutableListOf<List<T>>()
    if (this.size <= size) {
        // 只有一组
        group.add(this)
    } else {
        val remain = this.size %size
        val l = take(this.size - remain)

        var eachList: MutableList<T>? = null
        l.forEach {
            if (eachList == null) {
                eachList = mutableListOf<T>().apply {
                    group.add(this)
                }
            }

            eachList?.add(it)
            if (eachList?.size == size) {
                // 需要一组新的
                eachList = null
            }
        }

        group.add(takeLast(remain))
    }

    block(group)
}

/**
 * 移除集合中满足给定条件的所有元素。
 * @param block 删除条件。true：删除
 */
fun <T> MutableList<T>.removeWhen(block: (T) -> Boolean) {
    for (i in this.size - 1 downTo 0) {
        if (block.invoke(this[i])) {
            this.removeAt(i)
        }
    }
}